//package com.bnq.control.common.utils;
//
//import android.content.ContentResolver;
//import android.content.ContentValues;
//import android.content.Context;
//import android.net.Uri;
//import android.os.Environment;
//import android.os.ParcelFileDescriptor;
//import android.provider.MediaStore;
//
//import com.bnq.control.common.constant.StorageConstant;
//
//import java.io.BufferedInputStream;
//import java.io.BufferedOutputStream;
//import java.io.File;
//import java.io.FileDescriptor;
//import java.io.FileInputStream;
//import java.io.FileNotFoundException;
//import java.io.FileOutputStream;
//import java.io.IOException;
//import java.io.InputStream;
//import java.io.OutputStream;
//
//
///**
// * Created by qianwei on 2017/11/21.
// */
//
//public class FileOperationUtils {
//
//    private static final String TAG = FileOperationUtils.class.getSimpleName();
//
//    public static void deleteAllFile(File file) {
//        if (null != file && file.exists()) {
//            if (file.isDirectory()) {
//                File[] listFiles = file.listFiles();
//                if (null != listFiles && listFiles.length > 0) {
//                    for (File subFile : listFiles) deleteAllFile(subFile);
//                }
//            }
//            file.delete();
//        }
//    }
//
//    /**
//     * 删除某个文件下后缀为的文件
//     *
//     * @param filePath   文件夹路径
//     * @param fileSuffix 文件类型
//     */
//    public static void deleteAllFile(String filePath, String fileSuffix) {
//        File fileDir = new File(filePath);
//        if (fileDir.exists() && fileDir.isDirectory()) {
//            File[] files = fileDir.listFiles();
//            if (null != files && files.length > 0) {
//                for (File file : files) {
//                    if (file.toString().endsWith(fileSuffix)) {
//                        file.delete();
//                    }
//                }
//            }
//        }
//    }
//
//
//    /**
//     * 复制沙盒私有文件到Download公共目录下
//     *
//     * @param context       上下文环境
//     * @param isSetMimeType 是否设置MimeType（.log格式会以.txt结尾，故不设置）
//     * @param relativePath  公共目录文件存储路径
//     * @param orgFilePath   被复制文件私有目录路径
//     * @param copyName      复制后的文件名称
//     * @param displayName   被复制文件的名称
//     */
//    public static void copyPrivateFileToDownload(Context context, boolean isSetMimeType, String relativePath,
//                                                 String orgFilePath, String copyName, String displayName) {
//        if (!BuildConfig.hasQ()) return;
//        ContentValues values = new ContentValues();
//        values.put(MediaStore.Files.FileColumns.DISPLAY_NAME, copyName);
//        if (isSetMimeType)
//            values.put(MediaStore.Files.FileColumns.MIME_TYPE, FileUtils.getFileMineType(displayName));  //MediaStore对应类型名
//        values.put(MediaStore.Files.FileColumns.TITLE, copyName);
//        values.put(MediaStore.Files.FileColumns.RELATIVE_PATH, relativePath);  //公共目录下目录名
//
//        Uri external = MediaStore.Downloads.EXTERNAL_CONTENT_URI;  //内部存储的Download路径
//        ContentResolver resolver = context.getContentResolver();
//        Uri insertUri = resolver.insert(external, values);  //使用ContentResolver创建需要操作的文件
//
//        String fileName = orgFilePath + displayName;
//        copyFile(fileName, insertUri, resolver);
//    }
//
//    /**
//     * 删除公共目录文件（对用一文件不能同时操作删除或创建操作）
//     *
//     * @param displayName 文件名检索
//     */
//    private static void deletePrivateFileToDownload(Context context, String displayName) {
//        if (!BuildConfig.hasQ()) return;
//        //删除原有文件
//        context.getContentResolver().delete(MediaStore.Downloads.EXTERNAL_CONTENT_URI,
//                MediaStore.Downloads.DISPLAY_NAME + "=?", new String[]{displayName});
//    }
//
//    /**
//     * 复制沙盒私有文件到Download公共目录下（应用删除文件依旧存在）
//     *
//     * @param context     上下文环境
//     * @param orgFilePath 文件私有目录路径
//     * @param displayName 复制后文件要显示的文件名称带后缀（如xx.txt）
//     */
//    public static void copyPrivateFileToDownload(Context context, String orgFilePath, String displayName) {
//        if (!BuildConfig.hasQ()) return;
//        ContentValues values = new ContentValues();
//        //values.put(MediaStore.Images.Media.DESCRIPTION, "This is a file");
//        values.put(MediaStore.Files.FileColumns.DISPLAY_NAME, displayName);
//        values.put(MediaStore.Files.FileColumns.MIME_TYPE, FileUtils.getFileMineType(displayName));  //MediaStore对应类型名
//        values.put(MediaStore.Files.FileColumns.TITLE, displayName);
//        values.put(MediaStore.Files.FileColumns.RELATIVE_PATH, StorageConstant.REMOTE_FILE_DOWNLOAD_PATH);  //公共目录下目录名
//
//        Uri external = MediaStore.Downloads.EXTERNAL_CONTENT_URI;  //内部存储的Download路径
//        ContentResolver resolver = context.getContentResolver();
//
//
//        Uri insertUri = resolver.insert(external, values);  //使用ContentResolver创建需要操作的文件
//
//        String fileName = orgFilePath + displayName;
//
//        copyFile(fileName, insertUri, resolver);
//    }
//
//    public static void copyFile(String fileName, Uri insertUri, ContentResolver resolver) {
//        new Thread(() -> {
//            InputStream inputStream = null;
//            OutputStream outputStream = null;
//            try {
//                inputStream = new FileInputStream(new File(fileName));
//                if (insertUri != null) {
//                    outputStream = resolver.openOutputStream(insertUri);
//                }
//                if (outputStream != null) {
//                    byte[] buffer = new byte[4096];
//                    int byteCount;
//                    while ((byteCount = inputStream.read(buffer)) != -1) {
//                        outputStream.write(buffer, 0, byteCount);
//                    }
//                }
//            } catch (IOException e) {
//                e.printStackTrace();
//            } finally {
//                CloseUtils.closeQuietly(inputStream, outputStream);
//            }
//        }).start();
//    }
//
//
//    /**
//     * TODO 这个方法需要放到io线程里面处理
//     * <p>
//     * 将SAF存储框架获取的文件Uri存储到私有沙盒目录
//     * （耗时放在子线程处理，应用删除文件随之删除）
//     *
//     * @param context 上下文环境
//     * @param uri     文件Uri
//     */
//    /*public static String copyUriFileToPrivateSD(Context context, Uri uri) {
//        DocumentFile documentFile = DocumentFile.fromSingleUri(context, uri);
//        if (null == documentFile) return null;
//        String fileName = documentFile.getName();//获取文件名，带后缀的
//
//        OutputStream outputStream = null;
//        InputStream inputStream = null;
//        FileOutputStream fos;
//        //设置私有沙盒存储路径
//        String uploadPath = context.getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS) +
//                File.separator + StorageConstant.UPLOAD_PATH + File.separator + fileName;
//        File realFile = new File(uploadPath);
//        if (null != realFile.getParentFile() && !realFile.getParentFile().exists())
//            realFile.getParentFile().mkdirs();
//        try {
//            fos = new FileOutputStream(realFile);
//            outputStream = new BufferedOutputStream(fos);
//            inputStream = new BufferedInputStream(context.getContentResolver().openInputStream(uri));
//
//            int byteCount;
//            byte[] buf = new byte[4096];
//            while ((byteCount = inputStream.read(buf)) != -1) {
//                outputStream.write(buf, 0, byteCount);
//            }
//            return uploadPath;
//        } catch (IOException exception) {
//            exception.printStackTrace();
//            return "";
//        } finally {
//            try {
//                if (inputStream != null)
//                    inputStream.close();
//                if (outputStream != null)
//                    outputStream.close();
//            } catch (IOException exception) {
//                exception.printStackTrace();
//            }
//        }
//    }*/
//
//    /**
//     * 通过文件Uri转成流形式
//     */
//    public static InputStream getInputStream(Context context, Uri uri) {
//        InputStream inputStream = null;
//        try {
//            ContentResolver cr = context.getContentResolver();
//            inputStream = cr.openInputStream(uri);
//        } catch (Exception e) {
//            e.printStackTrace();
//        }
//        return inputStream;
//    }
//
//    /**
//     * 通过文件Uri转成FileDescriptor形式
//     */
//    public static FileDescriptor getFileDescriptor(Context context, Uri uri) {
//        FileDescriptor fileDescriptor = null;
//        try {
//            ParcelFileDescriptor parcelFileDescriptor = context.getContentResolver().openFileDescriptor(uri, "r");
//            if (null != parcelFileDescriptor)
//                fileDescriptor = parcelFileDescriptor.getFileDescriptor();
//        } catch (FileNotFoundException e) {
//            e.printStackTrace();
//        }
//        return fileDescriptor;
//    }
//}
